
dojo.provide("dojo.widget.TreeBasicControllerV3");dojo.require("dojo.event.*");dojo.require("dojo.json");dojo.require("dojo.io.*");dojo.require("dojo.widget.TreeCommon");dojo.require("dojo.widget.TreeNodeV3");dojo.require("dojo.widget.TreeV3");dojo.widget.defineWidget("dojo.widget.TreeBasicControllerV3",[dojo.widget.HtmlWidget,dojo.widget.TreeCommon],function(){this.listenedTrees={};},{listenTreeEvents:["afterSetFolder","afterTreeCreate","beforeTreeDestroy"],listenNodeFilter:function(elem){return elem instanceof dojo.widget.Widget;},editor:null,initialize:function(args){if(args.editor){this.editor=dojo.widget.byId(args.editor);this.editor.controller=this;}},getInfo:function(elem){return elem.getInfo();},onBeforeTreeDestroy:function(message){this.unlistenTree(message.source);},onAfterSetFolder:function(message){if(message.source.expandLevel>0){this.expandToLevel(message.source,message.source.expandLevel);}
if(message.source.loadLevel>0){this.loadToLevel(message.source,message.source.loadLevel);}},_focusNextVisible:function(nodeWidget){if(nodeWidget.isFolder&&nodeWidget.isExpanded&&nodeWidget.children.length>0){returnWidget=nodeWidget.children[0];}else{while(nodeWidget.isTreeNode&&nodeWidget.isLastChild()){nodeWidget=nodeWidget.parent;}
if(nodeWidget.isTreeNode){var returnWidget=nodeWidget.parent.children[nodeWidget.getParentIndex()+1];}}
if(returnWidget&&returnWidget.isTreeNode){this._focusLabel(returnWidget);return returnWidget;}},_focusPreviousVisible:function(nodeWidget){var returnWidget=nodeWidget;if(!nodeWidget.isFirstChild()){var previousSibling=nodeWidget.parent.children[nodeWidget.getParentIndex()-1];nodeWidget=previousSibling;while(nodeWidget.isFolder&&nodeWidget.isExpanded&&nodeWidget.children.length>0){returnWidget=nodeWidget;nodeWidget=nodeWidget.children[nodeWidget.children.length-1];}}else{nodeWidget=nodeWidget.parent;}
if(nodeWidget&&nodeWidget.isTreeNode){returnWidget=nodeWidget;}
if(returnWidget&&returnWidget.isTreeNode){this._focusLabel(returnWidget);return returnWidget;}},_focusZoomIn:function(nodeWidget){var returnWidget=nodeWidget;if(nodeWidget.isFolder&&!nodeWidget.isExpanded){this.expand(nodeWidget);}else{if(nodeWidget.children.length>0){nodeWidget=nodeWidget.children[0];}}
if(nodeWidget&&nodeWidget.isTreeNode){returnWidget=nodeWidget;}
if(returnWidget&&returnWidget.isTreeNode){this._focusLabel(returnWidget);return returnWidget;}},_focusZoomOut:function(node){var returnWidget=node;if(node.isFolder&&node.isExpanded){this.collapse(node);}else{node=node.parent;}
if(node&&node.isTreeNode){returnWidget=node;}
if(returnWidget&&returnWidget.isTreeNode){this._focusLabel(returnWidget);return returnWidget;}},onFocusNode:function(e){var node=this.domElement2TreeNode(e.target);if(node){node.viewFocus();dojo.event.browser.stopEvent(e);}},onBlurNode:function(e){var node=this.domElement2TreeNode(e.target);if(!node){return;}
var labelNode=node.labelNode;labelNode.setAttribute("tabIndex","-1");node.viewUnfocus();dojo.event.browser.stopEvent(e);node.tree.domNode.setAttribute("tabIndex","0");},_focusLabel:function(node){var lastFocused=node.tree.lastFocused;var labelNode;if(lastFocused&&lastFocused.labelNode){labelNode=lastFocused.labelNode;dojo.event.disconnect(labelNode,"onblur",this,"onBlurNode");labelNode.setAttribute("tabIndex","-1");dojo.html.removeClass(labelNode,"TreeLabelFocused");}
labelNode=node.labelNode;labelNode.setAttribute("tabIndex","0");node.tree.lastFocused=node;dojo.html.addClass(labelNode,"TreeLabelFocused");dojo.event.connectOnce(labelNode,"onblur",this,"onBlurNode");dojo.event.connectOnce(labelNode,"onfocus",this,"onFocusNode");labelNode.focus();},onKey:function(e){if(!e.key||e.ctrkKey||e.altKey){return;}
var nodeWidget=this.domElement2TreeNode(e.target);if(!nodeWidget){return;}
var treeWidget=nodeWidget.tree;if(treeWidget.lastFocused&&treeWidget.lastFocused.labelNode){nodeWidget=treeWidget.lastFocused;}
switch(e.key){case e.KEY_TAB:if(e.shiftKey){treeWidget.domNode.setAttribute("tabIndex","-1");}
break;case e.KEY_RIGHT_ARROW:this._focusZoomIn(nodeWidget);dojo.event.browser.stopEvent(e);break;case e.KEY_LEFT_ARROW:this._focusZoomOut(nodeWidget);dojo.event.browser.stopEvent(e);break;case e.KEY_UP_ARROW:this._focusPreviousVisible(nodeWidget);dojo.event.browser.stopEvent(e);break;case e.KEY_DOWN_ARROW:this._focusNextVisible(nodeWidget);dojo.event.browser.stopEvent(e);break;}},onFocusTree:function(e){if(!e.currentTarget){return;}
try{var treeWidget=this.getWidgetByNode(e.currentTarget);if(!treeWidget||!treeWidget.isTree){return;}
var nodeWidget=this.getWidgetByNode(treeWidget.domNode.firstChild);if(nodeWidget&&nodeWidget.isTreeNode){if(treeWidget.lastFocused&&treeWidget.lastFocused.isTreeNode){nodeWidget=treeWidget.lastFocused;}
this._focusLabel(nodeWidget);}}
catch(e){}},onAfterTreeCreate:function(message){var tree=message.source;dojo.event.browser.addListener(tree.domNode,"onKey",dojo.lang.hitch(this,this.onKey));dojo.event.browser.addListener(tree.domNode,"onmousedown",dojo.lang.hitch(this,this.onTreeMouseDown));dojo.event.browser.addListener(tree.domNode,"onclick",dojo.lang.hitch(this,this.onTreeClick));dojo.event.browser.addListener(tree.domNode,"onfocus",dojo.lang.hitch(this,this.onFocusTree));tree.domNode.setAttribute("tabIndex","0");if(tree.expandLevel){this.expandToLevel(tree,tree.expandLevel);}
if(tree.loadLevel){this.loadToLevel(tree,tree.loadLevel);}},onTreeMouseDown:function(e){},onTreeClick:function(e){var domElement=e.target;var node=this.domElement2TreeNode(domElement);if(!node||!node.isTreeNode){return;}
var checkExpandClick=function(el){return el===node.expandNode;};if(this.checkPathCondition(domElement,checkExpandClick)){this.processExpandClick(node);}
this._focusLabel(node);},processExpandClick:function(node){if(node.isExpanded){this.collapse(node);}else{this.expand(node);}},batchExpandTimeout:20,expandAll:function(nodeOrTree){return this.expandToLevel(nodeOrTree,Number.POSITIVE_INFINITY);},collapseAll:function(nodeOrTree){var _this=this;var filter=function(elem){return(elem instanceof dojo.widget.Widget)&&elem.isFolder&&elem.isExpanded;};if(nodeOrTree.isTreeNode){this.processDescendants(nodeOrTree,filter,this.collapse);}else{if(nodeOrTree.isTree){dojo.lang.forEach(nodeOrTree.children,function(c){_this.processDescendants(c,filter,_this.collapse);});}}},expandToNode:function(node,withSelected){n=withSelected?node:node.parent;s=[];while(!n.isExpanded){s.push(n);n=n.parent;}
dojo.lang.forEach(s,function(n){n.expand();});},expandToLevel:function(nodeOrTree,level){dojo.require("dojo.widget.TreeTimeoutIterator");var _this=this;var filterFunc=function(elem){var res=elem.isFolder||elem.children&&elem.children.length;return res;};var callFunc=function(node,iterator){_this.expand(node,true);iterator.forward();};var iterator=new dojo.widget.TreeTimeoutIterator(nodeOrTree,callFunc,this);iterator.setFilter(filterFunc);iterator.timeout=this.batchExpandTimeout;iterator.setMaxLevel(nodeOrTree.isTreeNode?level-1:level);return iterator.start(nodeOrTree.isTreeNode);},getWidgetByNode:function(node){var widgetId;var newNode=node;while(!(widgetId=newNode.widgetId)){newNode=newNode.parentNode;if(newNode==null){break;}}
if(widgetId){return dojo.widget.byId(widgetId);}else{if(node==null){return null;}else{return dojo.widget.manager.byNode(node);}}},expand:function(node){if(node.isFolder){node.expand();}},collapse:function(node){if(node.isFolder){node.collapse();}},canEditLabel:function(node){if(node.actionIsDisabledNow(node.actions.EDIT)){return false;}
return true;},editLabelStart:function(node){if(!this.canEditLabel(node)){return false;}
if(!this.editor.isClosed()){this.editLabelFinish(this.editor.saveOnBlur);}
this.doEditLabelStart(node);},editLabelFinish:function(save){this.doEditLabelFinish(save);},doEditLabelStart:function(node){if(!this.editor){dojo.raise(this.widgetType+": no editor specified");}
this.editor.open(node);},doEditLabelFinish:function(save,server_data){if(!this.editor){dojo.raise(this.widgetType+": no editor specified");}
var node=this.editor.node;var editorTitle=this.editor.getContents();this.editor.close(save);if(save){var data={title:editorTitle};if(server_data){dojo.lang.mixin(data,server_data);}
if(node.isPhantom){var parent=node.parent;var index=node.getParentIndex();node.destroy();dojo.widget.TreeBasicControllerV3.prototype.doCreateChild.call(this,parent,index,data);}else{var title=server_data&&server_data.title?server_data.title:editorTitle;node.setTitle(title);}}else{if(node.isPhantom){node.destroy();}}},makeDefaultNode:function(parent,index){var data={title:parent.tree.defaultChildTitle};return dojo.widget.TreeBasicControllerV3.prototype.doCreateChild.call(this,parent,index,data);},runStages:function(check,prepare,make,finalize,expose,args){if(check&&!check.apply(this,args)){return false;}
if(prepare&&!prepare.apply(this,args)){return false;}
var result=make.apply(this,args);if(finalize){finalize.apply(this,args);}
if(!result){return result;}
if(expose){expose.apply(this,args);}
return result;}});dojo.lang.extend(dojo.widget.TreeBasicControllerV3,{createAndEdit:function(parent,index){var data={title:parent.tree.defaultChildTitle};if(!this.canCreateChild(parent,index,data)){return false;}
var child=this.doCreateChild(parent,index,data);if(!child){return false;}
this.exposeCreateChild(parent,index,data);child.isPhantom=true;if(!this.editor.isClosed()){this.editLabelFinish(this.editor.saveOnBlur);}
this.doEditLabelStart(child);}});dojo.lang.extend(dojo.widget.TreeBasicControllerV3,{canClone:function(child,newParent,index,deep){return true;},clone:function(child,newParent,index,deep){return this.runStages(this.canClone,this.prepareClone,this.doClone,this.finalizeClone,this.exposeClone,arguments);},exposeClone:function(child,newParent){if(newParent.isTreeNode){this.expand(newParent);}},doClone:function(child,newParent,index,deep){var cloned=child.clone(deep);newParent.addChild(cloned,index);return cloned;}});dojo.lang.extend(dojo.widget.TreeBasicControllerV3,{canDetach:function(child){if(child.actionIsDisabledNow(child.actions.DETACH)){return false;}
return true;},detach:function(node){return this.runStages(this.canDetach,this.prepareDetach,this.doDetach,this.finalizeDetach,this.exposeDetach,arguments);},doDetach:function(node,callObj,callFunc){node.detach();}});dojo.lang.extend(dojo.widget.TreeBasicControllerV3,{canDestroyChild:function(child){if(child.parent&&!this.canDetach(child)){return false;}
return true;},destroyChild:function(node){return this.runStages(this.canDestroyChild,this.prepareDestroyChild,this.doDestroyChild,this.finalizeDestroyChild,this.exposeDestroyChild,arguments);},doDestroyChild:function(node){node.destroy();}});dojo.lang.extend(dojo.widget.TreeBasicControllerV3,{canMoveNotANode:function(child,parent){if(child.treeCanMove){return child.treeCanMove(parent);}
return true;},canMove:function(child,newParent){if(!child.isTreeNode){return this.canMoveNotANode(child,newParent);}
if(child.actionIsDisabledNow(child.actions.MOVE)){return false;}
if(child.parent!==newParent&&newParent.actionIsDisabledNow(newParent.actions.ADDCHILD)){return false;}
var node=newParent;while(node.isTreeNode){if(node===child){return false;}
node=node.parent;}
return true;},move:function(child,newParent,index){return this.runStages(this.canMove,this.prepareMove,this.doMove,this.finalizeMove,this.exposeMove,arguments);},doMove:function(child,newParent,index){child.tree.move(child,newParent,index);return true;},exposeMove:function(child,newParent){if(newParent.isTreeNode){this.expand(newParent);}}});dojo.lang.extend(dojo.widget.TreeBasicControllerV3,{canCreateChild:function(parent,index,data){if(parent.actionIsDisabledNow(parent.actions.ADDCHILD)){return false;}
return true;},createChild:function(parent,index,data){if(!data){data={title:parent.tree.defaultChildTitle};}
return this.runStages(this.canCreateChild,this.prepareCreateChild,this.doCreateChild,this.finalizeCreateChild,this.exposeCreateChild,[parent,index,data]);},prepareCreateChild:function(){return true;},finalizeCreateChild:function(){},doCreateChild:function(parent,index,data){var newChild=parent.tree.createNode(data);parent.addChild(newChild,index);return newChild;},exposeCreateChild:function(parent){return this.expand(parent);}});